﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Iacym.Entities;
using Iacym.BusinessLogic;
using Microsoft.Practices.Unity;
using System.IO;
using System.Security.Cryptography;

namespace Iacym.UI
{
    public partial class FrmMttoLibro : Form
    {
        [Dependency]
        public ILibroBL libroBL { get; set; }

        [Dependency]
        public ILibroImagenBL libroimgBL { get; set; }

        public FrmMttoLibro()
        {
            InitializeComponent();
            this.BuildUp();
        }

        public LIBRO currentlibro { get; set; }
        bool isNew = true;
        byte[] pic = null;
        StringBuilder sb = new StringBuilder();

        public void Nuevo()
        {
            isNew = true;
            lIBROBindingSource.AddNew();
        }

        public void Editar()
        {
            isNew = false;
            lIBROBindingSource.DataSource = currentlibro;
            var img = libroimgBL.GetLibroImagebById(currentlibro.Id);
            if (img.Imagen != null)
            {
                MemoryStream stream = new MemoryStream(img.Imagen);
                pImagen.Image = Image.FromStream(stream);
            }
            else
            {
                pImagen.Image = pImagen.ErrorImage;
            }
        }

        private void BtnBuscar_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
        }

        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            this.pImagen.Image = Image.FromFile(this.openFileDialog1.FileName);
        }

        private void ObtenerImg()
        {
            sb = new StringBuilder();
            /* Convertir la imagen en arreglo de bytes[] */
            MemoryStream stream = new MemoryStream();
            pImagen.Image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            pic = stream.ToArray();

            /* Obtener el md5 */
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] hash = md5.ComputeHash(pic);

            foreach (byte b in hash)
            {
                sb.Append(b.ToString("x2").ToUpper());
            }
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            LIBRO currentlibro = lIBROBindingSource.Current as LIBRO;

            var msg = "ERROR";
            if (currentlibro != null)
            {
                if (isNew == true)
                {
                    try
                    {
                        if (pImagen.Image != null && pImagen.Image != pImagen.ErrorImage)
                        {
                            ObtenerImg();

                            var imagen = new LIBRO_IMAGEN()
                            {
                                Imagen = pic,
                                Hash = sb.ToString(),
                                LibroId = currentlibro.Id
                            };

                            currentlibro.LIBRO_IMAGEN = imagen;
                            currentlibro.Descripcion = descripcionTextBox.Text.ToUpper();
                            currentlibro.NroSesiones = Convert.ToInt32(nroSesionesTextBox.Text);
                            libroBL.AddLibro(currentlibro);
                            MessageBox.Show("Registro Correcto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Close();
                        }
                        else
                        {
                            var rpt = MessageBox.Show(this, "¿Seguro que desea guardar el Libro sin una imagen?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            // Caso de libro sin imagen
                            if (rpt == DialogResult.Yes)
                            {
                                var imagen = new LIBRO_IMAGEN()
                                {
                                    LibroId = currentlibro.Id
                                };
                                currentlibro.LIBRO_IMAGEN = imagen;
                                currentlibro.Descripcion = descripcionTextBox.Text.ToUpper();
                                currentlibro.NroSesiones = Convert.ToInt32(nroSesionesTextBox.Text);
                                libroBL.AddLibro(currentlibro);
                                MessageBox.Show("Registro Correcto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                if (isNew == false)
                {
                    try
                    {
                        if (pImagen.Image != null && pImagen.Image != pImagen.ErrorImage)
                        {
                            ObtenerImg();

                            var imagen = new LIBRO_IMAGEN()
                            {
                                LibroId = currentlibro.Id,
                                Imagen = pic,
                                Hash = sb.ToString()
                            };
                            currentlibro.LIBRO_IMAGEN = imagen;
                            currentlibro.Descripcion = descripcionTextBox.Text.ToUpper();
                            currentlibro.NroSesiones = Convert.ToInt32(nroSesionesTextBox.Text);
                            libroBL.UpdateLibro(currentlibro);
                            MessageBox.Show("Modificación Correcta.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Close();
                        }
                        else
                        {
                            var rpt = MessageBox.Show(this, "¿Seguro que desea guardar el Libro sin una imagen?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            // Caso de libro sin imagen
                            if (rpt == DialogResult.Yes)
                            {
                                var imagen = new LIBRO_IMAGEN()
                                {
                                    LibroId = currentlibro.Id
                                };
                                currentlibro.LIBRO_IMAGEN = imagen;
                                currentlibro.Descripcion = descripcionTextBox.Text.ToUpper();
                                currentlibro.NroSesiones = Convert.ToInt32(nroSesionesTextBox.Text);
                                libroBL.UpdateLibro(currentlibro);
                                MessageBox.Show("Modificación Correcta.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void descripcionTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void FrmMttoLibro_Load(object sender, EventArgs e)
        {

        }

        private void nroClasesTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }
    }
}
